home *** CD-ROM | disk | FTP | other *** search
/ Practical Internet 2002 February / Practical Internet February 2002.iso / pc / Software / Browsing / httrack-3.09e2.exe / {app} / src_win / WinHTTrack / OptionTab10.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  2001-08-18  |  11.6 KB  |  352 lines

  1. // OptionTab10.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Shell.h"
  6. #include "OptionTab10.h"
  7. #include "ProxyId.h"
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15. /* Externe C */
  16. extern "C" {
  17.   #include "htslib.h"
  18. }
  19.  
  20.   //extern char* jump_identification(char*);
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. // COptionTab10 property page
  24.  
  25. IMPLEMENT_DYNCREATE(COptionTab10, CPropertyPage)
  26.  
  27. COptionTab10::COptionTab10() : CPropertyPage(COptionTab10::IDD)
  28. {
  29.   // Patcher titre
  30.   if (LANG_T(-1)) {    // Patcher en franτais
  31.     m_psp.pszTitle=LANG(LANG_IOPT10); // titre
  32.     m_psp.dwFlags|=PSP_USETITLE;
  33.   }
  34.   m_psp.dwFlags|=PSP_HASHELP;
  35.   //
  36.     //{{AFX_DATA_INIT(COptionTab10)
  37.     m_proxy = _T("");
  38.     m_port = _T("");
  39.     m_ftpprox = FALSE;
  40.     //}}AFX_DATA_INIT
  41. }
  42.  
  43. COptionTab10::~COptionTab10()
  44. {
  45. }
  46.  
  47. void COptionTab10::DoDataExchange(CDataExchange* pDX)
  48. {
  49.     CPropertyPage::DoDataExchange(pDX);
  50.     //{{AFX_DATA_MAP(COptionTab10)
  51.     DDX_Control(pDX, IDC_prox, m_ctl_prox);
  52.     DDX_Control(pDX, IDC_PWDHIDE, m_ctl_pwdhide);
  53.     DDX_Control(pDX, IDC_ftpprox, m_ctl_ftpprox);
  54.     DDX_Control(pDX, IDC_portprox, m_ctl_portprox);
  55.     DDX_Control(pDX, IDC_proxtitle, m_ctl_proxtitle);
  56.     DDX_Text(pDX, IDC_prox, m_proxy);
  57.     DDX_Text(pDX, IDC_portprox, m_port);
  58.     DDX_Check(pDX, IDC_ftpprox, m_ftpprox);
  59.     //}}AFX_DATA_MAP
  60. }
  61.  
  62. #define wm_ProxySearch (WM_USER + 1)
  63. BEGIN_MESSAGE_MAP(COptionTab10, CPropertyPage)
  64.     //{{AFX_MSG_MAP(COptionTab10)
  65.     ON_BN_CLICKED(IDC_proxyconfigure, Onproxyconfigure)
  66.     ON_EN_CHANGE(IDC_prox, OnChangeprox)
  67.     ON_BN_CLICKED(IDC_PWDHIDE, OnPwdhide)
  68.     ON_CBN_SELCHANGE(IDC_prox, OnChangeprox)
  69.     ON_CBN_EDITCHANGE(IDC_prox, OnChangeprox)
  70.     ON_CBN_EDITUPDATE(IDC_prox, OnChangeprox)
  71.     //}}AFX_MSG_MAP
  72.   ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  73.   ON_MESSAGE( wm_ProxySearch, ProxySearch0 )
  74.   ON_MESSAGE( wm_ProxySearch+1, ProxySearch1 )
  75.   ON_MESSAGE( wm_ProxySearch+2, ProxySearch2 )
  76.   ON_MESSAGE( wm_ProxySearch+3, ProxySearch3 )
  77.   ON_MESSAGE( wm_ProxySearch+4, ProxySearch4 )
  78.   ON_MESSAGE( wm_ProxySearch+5, ProxySearch5 )
  79.   ON_MESSAGE( wm_ProxySearch+6, ProxySearch6 )
  80.   ON_MESSAGE( wm_ProxySearch+7, ProxySearch7 )
  81.   ON_MESSAGE( wm_ProxySearch+8, ProxySearch8 )
  82.   ON_MESSAGE( wm_ProxySearch+9, ProxySearch9 )
  83. END_MESSAGE_MAP()
  84.  
  85. /////////////////////////////////////////////////////////////////////////////
  86. // COptionTab10 message handlers
  87.  
  88.  
  89. BOOL COptionTab10::OnInitDialog() 
  90. {
  91.     CPropertyPage::OnInitDialog();
  92.     
  93.   EnableToolTips(true);     // TOOL TIPS
  94.  
  95.   /* hide password */
  96.   CString st;
  97.   GetDlgItemText(IDC_prox,st);
  98.   if (st.Find('@')>=0) {
  99.     m_ctl_pwdhide.SetCheck(1);
  100.     OnPwdhide();
  101.   } else {
  102.     m_ctl_pwdhide.SetCheck(0);
  103.     OnPwdhide();
  104.   }
  105.  
  106.   if (LANG_T(-1)) {    // Patcher en franτais
  107.     SetDlgItemText(IDC_proxyconfigure,LANG(LANG_I47b)); // "Configurer"
  108.     SetDlgItemText(IDC_ftpprox,LANG(LANG_I47c));
  109.     SetDlgItemText(IDC_PWDHIDE,LANG_HIDEPWD);  /* Hide password */
  110.   }  
  111.  
  112.   // mode modif α la volΘe
  113.   if (modify==1) {
  114.     GetDlgItem(IDC_prox           ) ->ModifyStyle(0,WS_DISABLED);
  115.     GetDlgItem(IDC_portprox       ) ->ModifyStyle(0,WS_DISABLED);
  116.     GetDlgItem(IDC_proxyconfigure ) ->ModifyStyle(0,WS_DISABLED);
  117.     GetDlgItem(IDC_proxtitle      ) ->ModifyStyle(0,WS_DISABLED);
  118.     GetDlgItem(IDC_ftpprox        ) ->ModifyStyle(0,WS_DISABLED);
  119.   } else {
  120.     GetDlgItem(IDC_prox           ) ->ModifyStyle(WS_DISABLED,0);
  121.     GetDlgItem(IDC_portprox       ) ->ModifyStyle(WS_DISABLED,0);
  122.     GetDlgItem(IDC_proxyconfigure ) ->ModifyStyle(WS_DISABLED,0);
  123.     GetDlgItem(IDC_proxtitle      ) ->ModifyStyle(WS_DISABLED,0);
  124.     GetDlgItem(IDC_ftpprox        ) ->ModifyStyle(WS_DISABLED,0);
  125.   }
  126.  
  127.   CString str;
  128.   GetDlgItemText(IDC_prox,str);
  129.   m_ctl_prox.ResetContent();
  130.   m_ctl_prox.AddString("");
  131.  
  132.   HKEY phkResult;
  133.   if (RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings",0,KEY_READ,&phkResult)==ERROR_SUCCESS) {
  134.     DWORD type=0;
  135.     DWORD datasize=1000;
  136.     char data[1024]="";
  137.     if (RegQueryValueEx(phkResult,"ProxyServer",0,&type,(unsigned char*)&data,&datasize)==ERROR_SUCCESS) {
  138.       if (datasize) {
  139.         char* a=strchr(data,':');
  140.         if (a)
  141.           *a='\0';
  142.         m_ctl_prox.AddString(data);
  143.       }
  144.     }
  145.     RegCloseKey(phkResult);
  146.   }
  147.   SetDlgItemText(IDC_prox,str);
  148.  
  149.   // Launch proxy name search
  150.   int i=0;
  151.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="proxy")   ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  152.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="www")     ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  153.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="ns")      ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  154.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="web")     ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  155.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="ntserv")  ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  156.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="gate")    ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  157.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="gateway") ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  158.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="firewall"),this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  159.   WSAAsyncGetHostByName(this->m_hWnd,wm_ProxySearch+i,(ProxyDetectName[i]="cache")   ,this->ProxyDetectBuff[i],sizeof(this->ProxyDetectBuff[i])); i++;
  160.  
  161.     return TRUE;  // return TRUE unless you set the focus to a control
  162.                   // EXCEPTION: OCX Property Pages should return FALSE
  163. }
  164.  
  165.  
  166. void COptionTab10::Onproxyconfigure() 
  167. {
  168.   CProxyId proxy;
  169.   char adr[256];
  170.   CString s;
  171.   GetDlgItemText(IDC_portprox,s);
  172.   proxy.m_proxport=s;
  173.   GetDlgItemText(IDC_prox,s);
  174.   strcpy(adr,s);
  175.   proxy.m_proxadr=jump_identification(adr);
  176.   if (jump_identification(adr)!=adr) {
  177.     char user_pass[256]; user_pass[0]='\0';
  178.     char* a;
  179.     strncat(user_pass,adr,(int) jump_identification(adr) - (int) adr - 1);
  180.     a=strchr(user_pass,':');
  181.     if (a)
  182.       *a='\0';
  183.     else
  184.       a=user_pass+strlen(user_pass);
  185.     proxy.m_proxlogin=user_pass;
  186.     proxy.m_proxpass=a+1;
  187.   }
  188.   if (proxy.DoModal() == IDOK) {
  189.     if (proxy.m_proxlogin.GetLength()==0) {
  190.       SetDlgItemText(IDC_prox,proxy.m_proxadr);
  191.       m_ctl_pwdhide.SetCheck(0);
  192.       OnPwdhide();
  193.     } else {
  194.       SetDlgItemText(IDC_prox,proxy.m_proxlogin+":"+proxy.m_proxpass+"@"+proxy.m_proxadr);
  195.       m_ctl_pwdhide.SetCheck(1);
  196.       OnPwdhide();
  197.     }
  198.     SetDlgItemText(IDC_portprox,proxy.m_proxport);
  199.   }
  200. }
  201.  
  202.  
  203.  
  204. // ------------------------------------------------------------
  205. // TOOL TIPS
  206. //
  207. // ajouter dans le .cpp:
  208. // remplacer les deux Wid1:: par le nom de la classe::
  209. // dans la message map, ajouter
  210. // ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  211. // dans initdialog ajouter
  212. // EnableToolTips(true);     // TOOL TIPS
  213. //
  214. // ajouter dans le .h:
  215. // char* GetTip(int id);
  216. // et en generated message map
  217. // afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  218. BOOL COptionTab10::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  219. {
  220.   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  221.   UINT nID =pNMHDR->idFrom;
  222.   if (pTTT->uFlags & TTF_IDISHWND)
  223.   {
  224.     // idFrom is actually the HWND of the tool
  225.     nID = ::GetDlgCtrlID((HWND)nID);
  226.     if(nID)
  227.     {
  228.       char* st=GetTip(nID);
  229.       if (st != "") {
  230.         pTTT->lpszText = st;
  231.         pTTT->hinst = AfxGetResourceHandle();
  232.         return(TRUE);
  233.       }
  234.     }
  235.   }
  236.   return(FALSE);
  237. }
  238. char* COptionTab10::GetTip(int ID)
  239. {
  240.   switch(ID) {
  241.     case IDC_prox:  return LANG(LANG_G14); break; // "Proxy if needed","Proxy si besoin"); break;
  242.     case IDC_portprox: return LANG(LANG_G15); break; // "Proxy port","Port du proxy"); break;
  243.     case IDC_proxyconfigure: return LANG_G15b; break;
  244.     case IDC_ftpprox: return LANG_G15c; break;
  245.   }
  246.   return "";
  247. }
  248. // TOOL TIPS
  249. // ------------------------------------------------------------
  250.  
  251.  
  252.  
  253. void COptionTab10::OnChangeprox() 
  254. {
  255.   CString st="";
  256.   char tempo[8192];
  257.   CString port="";
  258.  
  259.   GetDlgItemText(IDC_prox,st);
  260.  
  261.   int pos=st.Find(':');
  262.   if (pos>=0) {
  263.     port=st.Mid(pos+1);
  264.     st=st.Mid(0,pos);
  265.     SetDlgItemText(IDC_prox,st);
  266.   }
  267.   strcpy(tempo,st);
  268.   
  269.   int ex=0;
  270.   do {
  271.     if (strlen(tempo)>0) {
  272.       switch (tempo[strlen(tempo)-1]) {
  273.       case 10: case 13: case 32: tempo[strlen(tempo)-1]='\0';
  274.         break;
  275.       default: ex=1;
  276.         break;
  277.       }
  278.     } else ex=1;
  279.   } while(!ex);
  280.   
  281.   if ((strlen(tempo)>0)!=prox_status) {
  282.     prox_status=!prox_status;
  283.     
  284.     if (strlen(tempo)>0) {
  285.       CString st="";
  286.       GetDlgItemText(IDC_portprox,st);
  287.       if (strlen(st)==0) {
  288.         SetDlgItemText(IDC_portprox,"8080");
  289.         m_ctl_portprox.RedrawWindow();
  290.       }
  291.       m_ctl_proxtitle.ModifyStyle(WS_DISABLED,0);
  292.     }
  293.     else {
  294.       SetDlgItemText(IDC_portprox,"");
  295.       m_ctl_portprox.RedrawWindow();
  296.       m_ctl_proxtitle.ModifyStyle(0,WS_DISABLED);
  297.     }
  298.     m_ctl_proxtitle.RedrawWindow();
  299.   }  
  300.  
  301.   if (port.GetLength())
  302.     SetDlgItemText(IDC_portprox,port);
  303. }
  304.  
  305. void COptionTab10::OnPwdhide() 
  306. {
  307.   /* ES_PASSWORD */
  308.   if (IsDlgButtonChecked(IDC_PWDHIDE)) {
  309.     GetDlgItem(IDC_prox)->ModifyStyle(WS_VISIBLE,0);
  310.     GetDlgItem(IDC_prox)->ModifyStyle(0,WS_DISABLED);
  311.     GetDlgItem(IDC_portprox)->ModifyStyle(WS_VISIBLE,0);
  312.     GetDlgItem(IDC_portprox)->ModifyStyle(0,WS_DISABLED);
  313.   } else {
  314.     GetDlgItem(IDC_prox)->ModifyStyle(0,WS_VISIBLE);
  315.     GetDlgItem(IDC_prox)->ModifyStyle(WS_DISABLED,0);
  316.     GetDlgItem(IDC_portprox)->ModifyStyle(0,WS_VISIBLE);
  317.     GetDlgItem(IDC_portprox)->ModifyStyle(WS_DISABLED,0);
  318.   }
  319.   RedrawWindow();
  320.  
  321.  
  322. LRESULT COptionTab10::ProxySearch0(WPARAM wParam,LPARAM lParam) { return ProxySearch(0,wParam,lParam); }
  323. LRESULT COptionTab10::ProxySearch1(WPARAM wParam,LPARAM lParam) { return ProxySearch(1,wParam,lParam); }
  324. LRESULT COptionTab10::ProxySearch2(WPARAM wParam,LPARAM lParam) { return ProxySearch(2,wParam,lParam); }
  325. LRESULT COptionTab10::ProxySearch3(WPARAM wParam,LPARAM lParam) { return ProxySearch(3,wParam,lParam); }
  326. LRESULT COptionTab10::ProxySearch4(WPARAM wParam,LPARAM lParam) { return ProxySearch(4,wParam,lParam); }
  327. LRESULT COptionTab10::ProxySearch5(WPARAM wParam,LPARAM lParam) { return ProxySearch(5,wParam,lParam); }
  328. LRESULT COptionTab10::ProxySearch6(WPARAM wParam,LPARAM lParam) { return ProxySearch(6,wParam,lParam); }
  329. LRESULT COptionTab10::ProxySearch7(WPARAM wParam,LPARAM lParam) { return ProxySearch(7,wParam,lParam); }
  330. LRESULT COptionTab10::ProxySearch8(WPARAM wParam,LPARAM lParam) { return ProxySearch(8,wParam,lParam); }
  331. LRESULT COptionTab10::ProxySearch9(WPARAM wParam,LPARAM lParam) { return ProxySearch(9,wParam,lParam); }
  332.  
  333. // Search dor a proxy
  334. #define WSAGETASYNCERROR(lParam)            HIWORD(lParam)
  335. #define WSAGETASYNCBUFLEN(lParam)           LOWORD(lParam)
  336. LRESULT COptionTab10::ProxySearch(int id,WPARAM wParam,LPARAM lParam) {
  337.   int errcode=WSAGETASYNCERROR(lParam);
  338.   int bufflen=WSAGETASYNCBUFLEN(lParam);
  339.  
  340.   if ((id>=0) && (id<10)) {
  341.     if (!errcode) {
  342.       //HOSTENT* host=(HOSTENT*) ProxyDetectBuff[id];
  343.       //if (host->h_name) {
  344.       m_ctl_prox.AddString(ProxyDetectName[id]);
  345.       //}
  346.     }
  347.   }
  348.  
  349.   return 0;
  350. }
  351.